<?php
/**
 * Description of CategoriaProdutoDAO
 *
 * @author Magno
 */
class RespostaDAO {

    private $conexao;
    public function __construct() {
        $this->conexao = Conexao::getConexao();
    }

    public function salvar($resposta) {

        try {

            $enqueteDAO = new EnqueteDAO();

            if($resposta->getEnquete()->getEnqueteID() == null || $resposta->getEnquete()->getEnqueteID() <= 0)
                $resposta->setEnquete($enqueteDAO->salvar($resposta->getEnquete()));

            if($resposta->getRespostaID() != null && $resposta->getRespostaID() > 0) {
                $statment = $this->conexao->prepare("UPDATE resposta SET
                        descricao = :descricao,
                        enqueteID = :enqueteID
                        WHERE respostaID = :respostaID");

            }else {
                $statment = $this->conexao->prepare("INSERT INTO resposta(respostaID,descricao,enqueteID) VALUES (:respostaID,:descricao,:enqueteID);");
            }

            if($statment->execute($resposta->toBD())) {

                if($resposta->getRespostaID() == null || $resposta->getRespostaID() <= 0)
                    $resposta->setRespostaID($this->conexao->lastInsertId());
                return $resposta;

            }else {
                $erros = $statment->errorInfo();
                throw new Exception("Erro RespostaDAO: ".$erros[2]);
            }

        }catch(PDOException $err) {
            throw new Exception("Erro RespostaDAO:".$err->getMessage());
        }

    }

    public function excluir($respostaID) {

        try {

            $statment = $this->conexao->prepare("DELETE FROM resposta WHERE respostaID = :respostaID");
            $statment->bindParam(':respostaID',$respostaID);

            if(!$statment->execute()) {
                $erros = $statment->errorInfo();
                throw new Exception("Erro RespostaDAO: ".$erros[2]);
            }

        }catch(PDOException $err) {
            throw new Exception("Erro RespostaDAO:".$err->getMessage());
        }

    }

    public function listar($pagina = 0,$descricao = "", $enqueteID = 0, $carregarDependencias = false) {
        try {

            $enqueteDAO = new EnqueteDAO();

            $limite = Util::getPaginacao($pagina);
            $where = $this->getWhere($descricao,$enqueteID);
            $respostas = array();
            $statment = $this->conexao->query( "SELECT * FROM resposta c $where $limite" );

            foreach ( $statment->fetchAll(PDO::FETCH_SERIALIZE) as $row ) {
                $resposta = new RespostaBean($row['respostaID'], $row['descricao']);
                if($carregarDependencias){
                    $resposta->setEnquete($enqueteDAO->buscarPorID($row['enqueteID']));
                }
                $respostas[] = $resposta;
            }

            return $respostas;

        }catch(PDOException $err) {
            throw new Exception("Erro RespostaDAO:".$err->getMessage());
        }
    }

    public function listarPorOrdem($pagina = 0, $tamanho = 0, $ordem = "respostaID", $direcao = "DESC") {
        try {

            $limite = Util::getPaginacao($pagina,$tamanho);
            $respostas = array();
            $statment = $this->conexao->query("SELECT * FROM resposta c ORDER BY u.$ordem $direcao $limite");

            foreach ($statment->fetchAll(PDO::FETCH_SERIALIZE) as $row){
                $resposta = new RespostaBean($row['respostaID'], $row['descricao']);
                /*if($carregarDependencias){
                    $resposta->setEnquete($enqueteDAO->buscarPorID($row['enqueteID']));
                }*/
                $respostas[] = $resposta;
            }

            return $respostas;
        } catch (PDOException $err) {
            throw new Exception("Erro EnqueteDAO:" . $err->getMessage());
        }
    }

    public function buscarPorID($respostaID, $carregarDependencias = false) {
        try {
            $enqueteDAO = new EnqueteDAO();
            $row = $this->conexao->query("SELECT * FROM resposta WHERE respostaID = $respostaID ")->fetch(PDO::FETCH_SERIALIZE);

            if(isset($row['respostaID']) && $row['respostaID'] > 0) {
                $resposta = new RespostaBean($row['respostaID'], $row['descricao']);
                if($carregarDependencias){
                    $resposta->setEnquete($enqueteDAO->buscarPorID($row['enqueteID']));
                }
                return $resposta;
            }else {
                return null;
            }


        }catch(PDOException $err) {
            throw new Exception("Erro RespostaDAO:".$err->getMessage());
        }
    }

    private function getWhere($descricao="",$enqueteID = 0) {
        $where = " WHERE 1 = 1 ";

        if (isset ($descricao) && strlen($descricao) > 0) {
            $where = $where." AND c.descricao = '$descricao' ";
        }

        if (isset ($enqueteID) && $enqueteID > 0) {
            $where = $where." AND c.enqueteID = $enqueteID ";
        }

        return $where;
    }

    public function total($descricao = "",$enqueteID = 0) {
        try {

            $where = $this->getWhere($descricao, $enqueteID);
            $total = $this->conexao->query( "SELECT COUNT(c.respostaID) total FROM resposta c $where" )->fetch(PDO::FETCH_COLUMN);
            return $total;

        }catch(PDOException $err) {
            throw new Exception("Erro RespostaDAO:".$err->getMessage());
        }
    }

}
?>